package com.luomo.java.juc.volatiledemo;

/**
 * 指令重排
 *
 * volatile实现禁止指令重排优化，避免多线程环境下程序出现乱序执行的现象
 *
 * @author LiuMei
 * @date 2021-01-12.
 */
public class ReSortDemo {

    int a = 0;
    boolean flag = false;

    public void method1() {
        a = 1; //语句1
        flag = true;//语句2
    }

    /**
     * 正常情况a为6,指令重排的情况下method1的两条赋值语句没有数据依赖性，可能会先执行语句2，再执行语句1
     * 执行完语句2，method2获取到flag为true，a设置为5
     */
    public void method2() {
        if (flag) {
            a = a + 5;
            System.out.println("value:" + a);
        }
    }
}
